package org.yinxianren.java.test.thread;

public class PrimeGenerator implements Runnable{


    public void run() {
        long number=1L;
        while (true) {
            if (isPrime(number)) {
                System.out.printf("Number %d is Prime \n",number);
            }

            if (Thread.currentThread().isInterrupted()) {
                System.out.printf("The Prime Generator has been Interrupted");
                return;
            }
            number++;
        }
    }

    private boolean isPrime(long number) {
        if (number <=2) {
            return true;
        }
        for (long i=2; i<number; i++){
            if ((number % i)==0) {
                return false;
            }
        }
        return true;
    }
}

/**
 * Thread 类还有其他可以检查线程是否被中断的方法。例如，这个静态方法interrupted()能检查正在运行的线程是否被中断。
 * isInterrupted()和interrupted() 方法有着很重要的区别。
 * 第一个不会改变interrupted属性值，但是第二个会设置成false。
 * interrupted() 方法是一个静态方法，建议使用isInterrupted()方法。
 * 在之前提到的，线程是可以忽略中断指令的，但是并这不是我们所期望的行为。
 */
class MyMain{
    public static void main(String[] args) {
        Runnable task=new PrimeGenerator();
        Thread thread = new Thread(task);
        thread.start();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.interrupt();
    }
}